﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SSS.Classes;


namespace SSS.DB
{
    public class DBAccess
    {
        public String getSize(int kundenid, String productid)
        {

            // Mit ProductID die QualifierMessung herausbekommen (= Armlänge oder Beinlänge) aus PDB -> Messlaenge 
            List<String> qualifierMessung = new List<String>();
            qualifierMessung = this.ReadRows("SELECT qualifierMessung FROM produktdatenbank WHERE produktId=" + productid);

            String qualifierMessungString;
            if (qualifierMessung.Count != 0)
                qualifierMessungString = qualifierMessung[0];
            else
                qualifierMessungString = "leer";

            // Mit KundenID und Messlaenge die Armlänge oder Beinlänge des Kunden auslesen aus KDB -> Laenge
            List<String> kundenLaenge = new List<String>();
            kundenLaenge = this.ReadRows("SELECT "+qualifierMessungString+" FROM kundendatenbank WHERE kundenId="+kundenid);
            
            String kundenLaengeString;
            if (kundenLaenge.Count != 0)
                kundenLaengeString = kundenLaenge[0];
            else
                kundenLaengeString = "0";


            // Select Groesse FROM PDB WHERE ProduktID = productid AND MinMessung <= Laenge AND MaxMessung >= Laenge -> Groesse (returnwert)
            List<String> groesse = new List<String>();
            groesse = this.ReadRows("SELECT groesse FROM produktdatenbank WHERE produktId="+productid+" AND minMessung <="+kundenLaengeString+" AND maxMessung>="+kundenLaengeString);
            String groesseString;
            if (groesse.Count !=0)
                 groesseString = groesse[0];
            else
                 groesseString = "Nicht"+Environment.NewLine +"vorrätig";
            
            //eigtl überflüssig - theoretisch bräuchte man das Qualifier Object um verschiedene Größen eines Produktes rauszugeben 
            /*
            QualifierObject test = new QualifierObject();
            test.Type = QualifierType.Laenge;
            test.Size = "XXL";

            List<QualifierObject> liste = new List<QualifierObject>();
            liste.Add(test);
            */
            Boolean bol;
            bol = this.saveHistory(kundenid, productid);
            return groesseString;
        }


        public int saveCustomer(Customer customer)
        {
           
            int kundenId = 0;
            if (customer.KundenID.Equals(0))
            {
                // neuen Kunden anlegen
                kundenId = this.InsertRow("INSERT INTO kundendatenbank (vorname, nachname, armlaenge, beinlaenge) VALUES ('" + customer.Prename + "','" + customer.Name + "'," + customer.Armlaenge + "," + customer.Beinlaenge+")");
                //kundenId = this.ReadRows("SELECT kundenID FROM kundendatenbank WHERE vorname='" + customer.Prename + "' AND nachname='" + customer.Name +"'");
               
            }
            else
            {
                // Update anhand von vorhandener ID
                this.InsertRow("UPDATE kundendatenbank SET vorname='" + customer.Prename + "', nachname='" + customer.Name + "', armlaenge=" + customer.Armlaenge + ", beinlaenge=" + customer.Beinlaenge+" WHERE kundenID="+customer.KundenID);
                kundenId = customer.KundenID;
            }
            
            return kundenId;
        }

        public String getProductIDfromReader(String readerID)
        {
            List<String> liste = new List<String>();
            liste = this.ReadRows("SELECT produktId FROM lgdatenbank WHERE lesegeraetId='"+readerID+"'");
            
            return (liste[0]);
        }


        public Boolean saveHistory(int customerID, String productID)
        {
            this.InsertRow("INSERT INTO historiedatenbank (kundenId, produktId) VALUES ("+customerID+", '"+productID+"')");
            return true;
        }

        public Customer getCustomer(int customerID)
        {
            Customer customer = new Customer();
            List<String> liste = new List<String>();
            liste = this.ReadRows("SELECT vorname FROM kundendatenbank WHERE kundenID="+customerID);
            customer.Prename = liste[0];
            liste.Clear();

            liste = this.ReadRows("SELECT nachname FROM kundendatenbank WHERE kundenID=" + customerID);
            customer.Name = liste[0];
            liste.Clear();

            liste = this.ReadRows("SELECT armlaenge FROM kundendatenbank WHERE kundenID=" + customerID);
            customer.Armlaenge = Convert.ToInt32(liste[0]);
            liste.Clear();

            liste = this.ReadRows("SELECT beinlaenge FROM kundendatenbank WHERE kundenID=" + customerID);
            customer.Beinlaenge = Convert.ToInt32(liste[0]);
            liste.Clear();

            customer.KundenID = customerID;


            return customer;
        }


        private List<String> ReadRows(string myReadQuery)
        {
            try
            {
                //Datenbankverbindung herstellen
            string myConnectionString = "SERVER=schaechter.biz;" +
                                "DATABASE=d0140798;" +
                                "UID=d0140798;" +
                                "PASSWORD=sss2012;";

            MySql.Data.MySqlClient.MySqlConnection connection = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);

            //Abfrage abschicken und Ergebnisse ausgeben
            MySql.Data.MySqlClient.MySqlCommand command = connection.CreateCommand();
            command.CommandText = myReadQuery; //"SELECT * FROM testtabelle";
            MySql.Data.MySqlClient.MySqlDataReader Reader;
            connection.Open();

          
                Reader = command.ExecuteReader();
            

            
            List<String> row = new List<String>();

            while (Reader.Read())
            {

                for (int i = 0; i < Reader.FieldCount; i++)
                    //row += Reader.GetValue(i).ToString();
                    row.Add(Reader.GetValue(i).ToString());
                    //Console.WriteLine(row); 
            }


            //DB Verbindung schließen
            connection.Close();
            return row;
            }
            catch (Exception ex)
            {
                System.Console.Write(ex.Message);

            }

            return new List<String>();
        }

        // Daten schreiben
        private int InsertRow(string myInsertQuery)
        {
            int kundenId = 0;
            //Datenbankverbindung herstellen
            string myConnectionString = "Data Source=schaechter.biz;" +
                                "DATABASE=d0140798;" +
                                "UID=d0140798;" +
                                "PASSWORD=sss2012;";

            //Daten in die Datenbank schreiben
            MySql.Data.MySqlClient.MySqlConnection myConnection = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
            MySql.Data.MySqlClient.MySqlCommand myCommand = new MySql.Data.MySqlClient.MySqlCommand(myInsertQuery);
            myCommand.Connection = myConnection;
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            kundenId = (int)myCommand.LastInsertedId;
            myCommand.Connection.Close();
            return kundenId;
        }

        
    }
}
